CoInput
===
###### tags: `coform`
CoInput est un librairie qui permet de construire de forme complexe avec un minimum de code.
## Utilisation de base
Pour l'utiliser il faut juste instancier l'objet CoInput en specifiant les options.
```javascript=
var coInput = new CoInput({
//options
container:"#co-inputs",
inputs:[
{
type:"inputSimple",
options:{
label:"Nom",
name:"firstName"
}
},
{
type:"inputSimple",
options:{
label:"Prénom",
name:"lastName"
}
}
],
onchange:function(name, value){
console.log(name, value)
}
})
```

## Options
### - container *(obligatoire)*
C'est une chaine de caractère (**string**) specifiant le selecteur de l'element qui va contenir les inputs.
----
### - inputs *(obligatoire)*
C'est un tableau d'objet ou de chaine de caractère (**[object|string]**) specifiant la configuration des inputs.
* ***Cas 1: utilisation d'objet***
```javascript=
var options = {
/*...*/
inputs:[
{
type:"inputSimple",
options:{
label:"Input simple",
name:"input-simple"
}
},
{
type:"colorPicker",
options:{
label:"Color",
name:"color"
}
},
]
/*...*/
}
```
* ***Cas 2: utilisation de chaine de caractère***
```javascript=
var options = {
/*...*/
inputs:["inputSimple", "color"]
/*...*/
}
```
* ***Cas 3: utilisation des deux***
```javascript=
var options = {
/*...*/
inputs:[
{
type:"inputSimple",
options:{
label:"Input simple",
name:"input-simple"
}
},
"color"
]
/*...*/
}
```
***Remarque:***
Pour avoir des inputs sur la même ligne, faut juste les regrouper dans un tableau.
- Exemple:
```javascript=
var options = {
/*...*/
inputs:[
[
{
type:"inputSimple",
options:{
label:"Même ligne",
name:"input-1"
}
},
{
type:"inputSimple",
options:{
label:"Même ligne",
name:"input-2"
}
}
],
{
type:"inputSimple",
options:{
label:"Autre ligne",
name:"input-3"
}
}
]
/*...*/
}
```

----
### - customInputType *(optionnel)*
C'est objet qu'on peut utiliser pour créer de type personnalisé.
```javascript=
var options = {
/*...*/
inputs:[
{
type:"myInput",
options:{
label:"Mon input"
}
}
],
customInputType:{
/**
* Pour créer un type personnaliser, faut suivre ces 4 étapes:
*/
myInput:function(options){
//- Etape 1: créer la structure html de votre input
var $html = $(`
${options.label}:
`)
//- Etape 2: attacher l'evenement "valueChange" à cet element au moment de changement de valeur de votre input
$html.find("input").change(function(){
$html.trigger("valueChange", $(this).val())
})
//- Etape 3: Faut ajouter et definir la propriéré "val" à votre element qui est une fonction retournant la valeur de votre input
$html.val = function(){
return $html.find("input").val()
}
//Etape 4: faut retourner l'element en question à la fin
return $html;
}
}
/*...*/
}
```

----
### - payload *(optionnel)*
C'est un objet qu'on peut utiliser pour passer des paramètres qui va être envoyé au gestionnaire d'événement au moment de changement.
```javascript=
var options = {
/*...*/
payload:{
//...parametres
},
onchange:function(name, value, payload){
//on peut recuperer le payload ici.
}
/*...*/
}
```
*Remarque*:
On peut surcharger ce payload dans chaque option des inputs.
```javascript=
var options = {
/*...*/
payload:{
key:"global-key"
},
inputs:{
{
type:"colorPicker",
options:{
//on surcharge la payload ici
payload:{
key:"specific-key"
}
}
}
}
/*...*/
}
```
----
### - onchange *(optionnel)*
C'est une fonction qui permet d'ecouter le changement de valuer des inputs. C'est une fonction qui prend trois paramètres (name, value, payload)
```javascript=
var options = {
/*...*/
onchange:function(name, value, payload){
//on peut recuperer le payload ici.
}
/*...*/
}
```
----
### - i18n *(optionnel)*
C'est un objet qu'on peut utiliser pour traduire le label des inputs en fonction de leur nom (name).
```javascript=
var options = {
/*...*/
inputs:[
"color",
{
type:"inputSimple",
options:{
name:"firstName"
}
}
],
i18n:{
color:"Couleur",
firstName:"Nom"
}
/*...*/
}
```

---
## Les inputs de base
La syntaxe de base pour declarer de type est:
```
{
type:"nom_du_type",
options:{
//options du type
}
}
```
### - Input simple
C'est un champ de type HTML input
* Type : **inputSimple**
* Options :
| Option | Type | Description | Valeur par defaut |
| ------------ | ------------------------------ | ---------------------------- | ----------------- |
| type | string (Valid HTML input type) | Specifier le type d'input. | "text" |
| name | string | Nom attribuer à l'input. | inputSimple |
| label | string | Label de l'input | null |
| defaultValue | any | Valeur par defaut de l'input | null |
### - Input group
C'est un champ qu'on peut rassembler plusieurs input simple
* Type: **inputGroup**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | ---------------------- | ------------------------------ | ----------------- |
| name | string | Nom du champ | inputGroup |
| label | string | Label du champ | null |
| inputs | [inputSimple_options] | Liste des inputs dans le group | [] |
| defaultValue | {inputName:inputValue} | Valeur par defaut | null |
### - Select
C'est un champ de type HTML select
* Type: **select**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | ---------------- | ---------------------- | ----------------- |
| name | string | Nom attribuer au champ | select |
| label | string | Label du champ | null |
| options | [{label, value}] | Les options du champ | [] |
| defaultValue | string | Valeur par defaut | null |
### - Color picker
C'est un champ pour sélectionner un couleur
* Type: **colorPicker**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | -------------------- | ----------------- | ----------------- |
| name | string | Nom du champ | colorPicker |
| label | string | Label du champ | null |
| defaultValue | string (valid color) | Valeur par defaut | null |
### - Textarea
C'est un champ de type HTML textarea
* Type: **textarea**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | ------ | ----------------- | ----------------- |
| name | string | Nom du champ | textarea |
| label | string | Label du champ | null |
| defaultValue | string | Valeur par defaut | "" |
### - Input file
C'est un champ de type HTML input file
* Type: **inputFile**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------ | ------ | -------------- | ----------------- |
| name | string | Nom du champ | inputFile |
| label | string | Label du champ | null |
### - Input group buttons
C'est un champ qui comporte plusieurs boutons qu'on peut cliquer pour selectionner une valeur.
* Type: **groupButtons**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | ------------------------ | --------------------- | ----------------- |
| name | string | Nom du champ | groupButtons |
| label | string | Label du champ | null |
| options | [{ label, value, icon }] | Les options du champ. | [] |
| defaultValue | string | Valeur par defaut | null |
### - Input multiple
C'est champ qui permet d'ajouter plusieurs inputs dynamiquement.
* Type: **inputMultiple**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | ------------------------ | --------------------------------------- | ----------------- |
| name | string | Nom du champ | inputMultiple |
| label | string | Label du champ | null |
| inputs | [valid_input_params] | Les inputs à ajouter pour chaque ligne. | [] |
| defaultValue | [{inputName:inputValue}] | Valeur par defaut | [] |
### - Input dynamic
C'est champ permet de rendre un input dynamic c'est-à-dire de pouvoir selectionner un valeur au lieu de saisir manuellement.
* Type: **inputDynamic**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | --------------- | ----------------- | ----------------- |
| name | string | Nom du champ | inputDynamic |
| label | string | Label du champ | null |
| options | [{label,value}] | Liste des options | [] |
| defaultValue | string | Valeur par defaut | null |
### - Input section
C'est champ permet de regrouper des inputs.
* Type: **section**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------ | -------------------- | --------------- | ----------------- |
| name | string | Nom du champ | "section" |
| label | string | Label du champ | "Section" |
| inputs | [valid_input_params] | Liste de inputs | [] |
### - Input css
L'input css c'est une extension de CoInput qui contient tout les propriétés css existant.
* Type: **cssPropertyCamelCase**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------ | ------ | -------------- | -------------------------------- |
| name | string | Nom du champ | Nom du propriété css en question |
| label | string | Label du champ | |
| defaultValue | string | Valeur par defaut | null |
### - Input tags
Un champ d'input qui permet de saisir des tags (mots clés)
* Type: **tags**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | ------ |:--------------------- | ----------------- |
| name | string | Nom du champ | "select" |
| label | string | Label du champ | |
| defaultValue | string | Valeur par défaut | "" |
| options | array | Valeur à séléctionner | [""] |
### - Input font select
Un champ d'input qui permet de séléctionner des polices (font family)
* Type: **selectFont**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------ | ------ | -------------- | ----------------- |
| name | string | Nom du champ | "select" |
| label | string | Label du champ | |
### - Input box shadow
Un groupe de champ composé d'input text et d'input switch pour configurer l'ombre de l'élément
* Type: **boxShadow**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | ------------------------- | ----------------- | ----------------- |
| name | string | Nom du champ | "boxShadow" |
| label | string | Label du champ | |
| defaultValue | string (valid box shadow) | Valeur par defaut | |
### - Input border
Un groupe d'input qui permet de définir le border d'un élément avec sa couleur et son type
* Type: **inputBorderSingle**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------ | ------ | -------------- | ----------------- |
| name | string | Nom du champ | "border" |
| label | string | Label du champ | |
### - Input Icon
Un input qui permet de choisir un icône de font awesome sur un élément
* Type: **inputIcon**
* Options:
| Option | Type | Description | Valeur par defaut |
| ------------ | ------ | ----------------- | ------------------------------------------- |
| name | string | Nom du champ | "inputIcon" |
| label | string | Label du champ | |
| defaultValue | string | Valeur par défaut | "fa fa-"+icon ou "Pas d'icône sélectionnée" |
### Les inputs de mise en forme css prédéfinie (style css)
Les input css à déclarer juste dans un input [""]:
La syntaxe de base pour declarer de type est:
```
{
inputs: [
"inputCss1", "inputCss2"
]
}
```
| name | property | type | description |
| ------------------------- | -------------------------- | ----------------- |:---------------------------------------------------------------------------------- |
| "accentColor" | accent-color | inputSimple | la couleur d'accentuation |
| "alignItems" | align-items | groupButtons | alignement d'un objet au sein de son conteneur |
| "alignSelf" | align-self | groupButtons | alignement des objets flexibles d'une ligne flexible |
| "all" | all | select | réinitialiser toutes les propriétés d'un élément |
| "animationDelay" | animation-delay | inputRange | durée d'attente avant de démarrer une animation |
| "animationDirection" | animation-direction | select | sens de l'animation |
| "animationDuration" | animation-duration | inputRange | durée d'une animation pour parcourir un cycle. |
| "animationFillMode" | animation-fill-mode | select | la façon dont une animation applique les styles avant et après exécution. |
| "animationIterationCount" | animation-iteration-count | inputRange | le nombre de cycles utilisés pour répéter une animation |
| "animationName" | animation-name | inputSimple | le nom de l'animation qui doivent appliquées à l'élément |
| "animationTimingFunction" | animation-timing-function | select | la façon dont une animation CSS se déroule au fur et à mesure de chaque cycle |
| "backdropFilter" | backdrop-filter | inputSimple | diffusion de la couleur sur la zone derrière l'élément |
| "backfaceVisibility" | backface-visibility | select | face arrière visible lorsqu'elle est orientée vers l'utilisateur. |
| "backgroundType" | background | inputGroup | [background-color, background-image]: Couleur et image d'un arrière-plan d'un elt |
| "backgroundAttachment" | background-attachment | select | position de l'image d'arrière-plan fixée dans la zone d'affichage |
| "backgroundBlendMode" | background-blend-mode | select | images d'arrière-plan fusionnées entre elles et avec l'arrière-plan. |
| "backgroundClip" | background-clip | select | l'arrière-plan d'un élément s'étend sous la boîte de contenu |
| "background" | background | colorPicker | arrière-plans d'un élément |
| "backgroundColor" | background-color | colorPicker | la couleur utilisée pour l'arrière-plan d'un élément |
| "backgroundImage" | background-image | inputFile | définir image comme arrière-plan |
| "backgroundOrigin" | background-origin | select | l'origine de l'arrière-plan background-image |
| "backgroundPosition" | background-position | inputSimple | la position initiale pour chaque image arrière-plan |
| "backgroundRepeat" | background-repeat | select | la façon d'image utilisé en arrière-plan sont répétées |
| "backgroundSize" | background-size | select | la taille des images d'arrière-plan pour l'élément |
| "border" | border | inputBorderSingle | les propriétés liées à la bordure |
| "borderWidth" | border-width | inputSimple | largeur de la bordure d'un élément |
| "borderColor" | border-color | colorPicker | couleur de la bordure d'un élément |
| "borderStyle" | border-style | select | le style des lignes utilisées pour les bordures des 4 côtés d'un élément |
| "borderRadius" | border-radius | inputGroup | les coins arrondis pour la bordure d'un élément |
| "borderBottomLeftRadius" | border-bottom-left-radius | inputNumber | le rayon de courbure de la bordure pour le coin en bas à gauche de l'élément |
| "borderBottomRightRadius" | border-bottom-right-radius | inputNumber | le rayon de courbure de la bordure pour le coin en bas à droite de l'élément |
| "borderTopLeftRadius" | border-top-left-radius | inputNumber | le rayon de courbure de la bordure pour le coin en haut à gauche de l'élément |
| "borderTopRightRadius" | border-top-right-radius | inputNumber | le rayon de courbure de la bordure pour le coin en haut à droite de l'élément |
| "bottom" | bottom | inputSimple | définition de l'emplacement vertical des éléments positionnés |
| "boxShadow" | box-shadow | inputShadow | ajout des ombres à la boîte d'un élément |
| "boxSizing" | box-sizing | select | la façon dont la hauteur et la largeur totale d'un élément est calculée |
| "breakAfter" | break-after | select | la façon dont la page, la colonne ou la région se fragmente après la boîte générée |
| "breakBefore" | break-before | select | la façon dont la page, la colonne ou la région se fragmente avant la boîte générée |
| "breakInside" | break-inside | select | comment la page, la colonne ou la région se fragmente au sein de la boîte générée |
| "captionSide" | caption-side | select | choisir l'emplacement de la légende d'un tableau |
| "caretColor" | caret-color | colorPicker | la couleur du curseur visible à l'endroit où l'utilisateur peut ajouter du contenu |
| "clear" | clear | select | indique si un élément peut situé à côté d'éléments flottants qui le précèdent |
| "color" | color | colorPicker | la couleur de premier plan d'un élément texte et de ses éventuelles décorations |
| "clipPath" | | inputSimple | empêche une portion d'un élément d'être affichée |
| "colLg" | | select | grid system de bootstrap col-lg |
| "colMd" | | select | grid system de bootstrap col-md |
| "cursor" | cursor | select | la forme du curseur lorsque le pointeur est au-dessus de l'élément |
| "direction" | direction | select | paramétrée afin de correspondre à la direction du texte |
| "display" | display | select | type d'affichage utilisée pour le rendu d'un élément |
| "filter" | filter | filterCssFunction | retourne un nouveau tableau contenant tous les éléments du tableau d'origine |
| "float" | float | select | indique qu'un élément doit être deplacé du flux normal |
| "flexDirection" | flex-direction | select | a façon dont les éléments flexibles sont placés dans un conteneur flexible |
| "font" | font | inputGroup | Selectionner ou charger une police pour la mise en forme de texte |
| "fontFamily" | font-family | inputGroup | Selectionner ou charger une police pour la mise en forme de texte |
| "fontSize" | font-size | inputNumber | définit la taille de police utilisée pour le texte |
| "fontStyle" | font-style | select | définit la style de police utilisée pour le texte |
| "fontVariant" | font-variant | select | définit tous les paramètres typographiques pour une police de caractères |
| "fontWeight" | font-weight | select | définit la graisse utilisée pour le texte |
| "height" | height | inputNumber | la hauteur de la boîte de contenu d'un élément |
| "left" | left | inputNumber | définit une partie de la position des éléments positionnés |
| "letterSpacing" | letter-spacing | inputNumber | définit l'interlettre utilisée pour les caractères qui composent le texte |
| "lineHeight" | line-height | inputNumber | indique la hauteur minimale des lignes au sein de l'élément |
| "margin" | margin | inputGroup | la taille des marges sur les quatre côtés de l'élément |
| "marginBottom" | margin-bottom | inputNumber | la marge basse appliquée à un élément |
| "marginLeft" | margin-left | inputNumber | la marge gauche appliquée à un élément |
| "marginRight" | margin-right | inputNumber | la marge right appliquée à un élément |
| "marginTop" | margin-top | inputNumber | la marge haut appliquée à un élément |
| "maxHeight" | max-height | inputNumber | la hauteur maximale d'un élément donné. |
| "minHeight" | min-height | inputNumber | la hauteur minimale d'un élément donné. |
| "minWidth" | min-width | inputNumber | la largeur minimale d'un élément donné |
| "maxWidth" | max-width | inputNumber | la largeur maximale d'un élément donné |
| "objectFit" | object-fit | select | la façon dont le contenu d'un élément remplacé doit s'adapter à son conteneur |
| "padding" | padding | inputGroup | définir les différents écarts de remplissage sur les quatre côtés d'un élément |
| "paddingBottom" | padding-bottom | inputNumber | ajuste la hauteur de la boîte de remplissage en bas de l'élément |
| "paddingLeft" | padding-left | inputNumber | ajuste la hauteur de la boîte de remplissage à gauche de l'élément |
| "paddingRight" | padding-right | inputNumber | ajuste la hauteur de la boîte de remplissage à droite de l'élément |
| "paddingTop" | padding-top | inputNumber | ajuste la hauteur de la boîte de remplissage en haut de l'élément |
| "overflowX" | overflow-x | select | les mécanismes à utiliser si le contenu dépasse des bords droit-gauche de la boîte |
| "overflowY" | overflow-y | select | les mécanismes à utiliser si le contenu dépasse des bords haut et bas de la boîte |
| "position" | position | select | définit la façon dont un élément est positionné dans un document |
| "right" | right | inputNumber | renvoie la valeur de la coordonnée droite de l'élément |
| "textAlign" | text-align | groupButtons | alignement horizontal d'un élément de bloc ou de la boîte d'une cellule de tableau |
| "textDecorationStyle" | text-decoration-style | select | définit le style appliqué sur les lignes visées par text-decoration-line |
| "textDecorationLine" | text-decoration-line | select | définit la façon dont les décorations linéaires sont ajoutées à un élément |
| "loaderUrl" | | select | url d'un chargement (spinner) |
| "hideOnDesktop" | | checkbox | définit que l'élément n'apparaise pas en mode Desktop (résolution) |
| "hideOnTablet" | | checkbox | définit que l'élément n'apparaise pas en mode Tablet (résolution) |
| "hideOnMobil" | | checkbox | définit que l'élément n'apparaise pas en mode Mobile (résolution) |
| "textDecoration" | text-decoration | select | décorer le texte en ajoutant une ligne sous, sur ou à travers le texte |
| "textDecorationColor" | text-decoration-color | colorPicker | définit la couleur utilisée pour dessiner les lignes décorant le texte |
| "textJustify" | text-justify | select | définit le type de justification à appliquer au texte justifié |
| "textTransform" | text-transform | select | définit la façon d'utiliser les lettres capitales pour le texte d'un élément |
| "textShadow" | text-shadow | inputShadow | ajouter des ombres au texte |
| "transitionDelay" | transition-delay | inputNumber | indique la durée à attendre avant de débuter la transition |
| "transitionDuration" | transition-duration | inputNumber | définit le nombre de secondes ou de millisecondes que doit durer une animation |
| "transitionProperty" | transition-property | inputNumber | désigne les propriétés CSS dont un effet de transition devrait être appliqué |
| "transitionTimingF" | transition-timing-function | select | la façon dont les propriétés CSS affectées par un transition sont calculées |
| "top" | top | inputNumber | définit une partie de la position des éléments positionnés |
| "verticalAlign" | vertical-align | select | définit l'alignement vertical d'une boîte en ligne/bloc ou une cellule de tableau |
| "visibility" | visibility | select | utilisée afin de cacher un élément |
| "width" | width | inputNumber | définir la largeur de la boîte du contenu d'un élément |
| "whiteSpace" | white-space | select | utilisée pour décrire la façon dont les blancs sont gérés au sein de l'élément |